package com.cv.platform.service.subscribe;

import com.cv.framework.common.pojo.PageResult;
import com.cv.platform.controller.platform.subscribe.vo.*;

/**
 * 订阅业务层接口
 *
 * @author Charles_XDXD
 */
public interface CvSubscribeService {

    /**
     * 获取订阅信息
     *
     * @param targetId 目标用户编号
     * @return 订阅信息
     */
    CvSubscribeDetailRespVO getSubscribe(Long targetId);

    /**
     * 保存订阅信息
     *
     * @param reqVO 订阅信息
     */
    void saveSubscribe(CvSubscribeSaveReqVO reqVO);

    /**
     * 删除订阅信息
     */
    void deleteSubscribe(Long id);

    /**
     * 删除订阅信息
     */
    void deleteSubscribeByUserId(Long targetId);

    /**
     * 分页查询订阅信息
     *
     * @param reqVO 分页查询请求对象
     * @return 分页数据
     */
    PageResult<CvSubscribeRespVO> selectSubscribePage(CvSubscribeReqVO reqVO);

    /**
     * 通过用户编号获取粉丝数量
     * 
     * @param userId 用户编号
     * @return 粉丝数量
     */
    Integer getFansCount(Long userId);
    
    /**
     * 通过用户编号获取关注数量
     * 
     * @param userId 用户编号
     * @return 关注数量
     */
    Integer getFollowCount(Long userId);

    /**
     * 获取粉丝分页数据
     *
     * @param reqVO 分页查询请求对象
     * @return 分页数据
     */
    PageResult<CvSubscribePageRespVO> getFansPage(CvSubscribePageReqVO reqVO);

    /**
     * 获取关注分页数据
     *
     * @param reqVO 分页查询请求对象
     * @return 分页数据
     */
    PageResult<CvSubscribePageRespVO> getFollowPage(CvSubscribePageReqVO reqVO);

    /**
     * 删除所有关注数据
     * 
     * @param userId 用户编号
     */
    void deleteAllSubscribe(Long userId);

}
